{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "wYtuKeK0dImp"
   },
   "outputs": [],
   "source": [
    "import csv\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
    "from google.colab import files"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "EmMyh9_mkDHF"
   },
   "source": [
    "The data for this exercise is available at: https://www.kaggle.com/datamunge/sign-language-mnist/home\n",
    "\n",
    "Sign up and download to find 2 CSV files: sign_mnist_test.csv and sign_mnist_train.csv -- You will upload both of them using this button before you can continue.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "IcLOZlnnc_N7"
   },
   "outputs": [],
   "source": [
    "uploaded=files.upload()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "4kxw-_rmcnVu"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(27455, 28, 28)\n",
      "(27455,)\n",
      "(7172, 28, 28)\n",
      "(7172,)\n"
     ]
    }
   ],
   "source": [
    "def get_data(filename):\n",
    "  # You will need to write code that will read the file passed\n",
    "  # into this function. The first line contains the column headers\n",
    "  # so you should ignore it\n",
    "  # Each successive line contians 785 comma separated values between 0 and 255\n",
    "  # The first value is the label\n",
    "  # The rest are the pixel values for that picture\n",
    "  # The function will return 2 np.array types. One with all the labels\n",
    "  # One with all the images\n",
    "  #\n",
    "  # Tips: \n",
    "  # If you read a full line (as 'row') then row[0] has the label\n",
    "  # and row[1:785] has the 784 pixel values\n",
    "  # Take a look at np.array_split to turn the 784 pixels into 28x28\n",
    "  # You are reading in strings, but need the values to be floats\n",
    "  # Check out np.array().astype for a conversion\n",
    "  with open(filename) as training_file:\n",
    "    reader = list(csv.reader(training_file, delimiter=',', quotechar='|'))\n",
    "    # Your code starts here\n",
    "    images, labels = [], []\n",
    "    for i in range(1, len(reader)):\n",
    "      labels.append(reader[i][0])\n",
    "      images.append(np.array_split(reader[i][1:], 28))\n",
    "    # Your code ends here\n",
    "    return np.array(images), np.array(labels)\n",
    "\n",
    "\n",
    "training_images, training_labels = get_data('sign_mnist_train.csv')\n",
    "testing_images, testing_labels = get_data('sign_mnist_test.csv')\n",
    "\n",
    "# Keep these\n",
    "print(training_images.shape)\n",
    "print(training_labels.shape)\n",
    "print(testing_images.shape)\n",
    "print(testing_labels.shape)\n",
    "\n",
    "# Their output should be:\n",
    "# (27455, 28, 28)\n",
    "# (27455,)\n",
    "# (7172, 28, 28)\n",
    "# (7172,)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "awoqRpyZdQkD"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(27455, 28, 28, 1)\n",
      "(7172, 28, 28, 1)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\envs\\python36\\lib\\site-packages\\ipykernel_launcher.py:6: DeprecationWarning: Both axis > a.ndim and axis < -a.ndim - 1 are deprecated and will raise an AxisError in the future.\n",
      "  \n",
      "D:\\Anaconda3\\envs\\python36\\lib\\site-packages\\ipykernel_launcher.py:7: DeprecationWarning: Both axis > a.ndim and axis < -a.ndim - 1 are deprecated and will raise an AxisError in the future.\n",
      "  import sys\n"
     ]
    }
   ],
   "source": [
    "# In this section you will have to add another dimension to the data\n",
    "# So, for example, if your array is (10000, 28, 28)\n",
    "# You will need to make it (10000, 28, 28, 1)\n",
    "# Hint: np.expand_dims\n",
    "\n",
    "training_images = np.expand_dims(training_images, axis=4)# Your Code Here\n",
    "testing_images = np.expand_dims(testing_images, axis=4)# Your Code Here\n",
    "\n",
    "# Create an ImageDataGenerator and do Image Augmentation\n",
    "train_datagen = ImageDataGenerator(rescale=1./255., # Your Code Here\n",
    "                                   rotation_range=40,\n",
    "                                   width_shift_range=0.2,\n",
    "                                   height_shift_range=0.2,\n",
    "                                   shear_range=0.2,\n",
    "                                   zoom_range=0.2,\n",
    "                                   horizontal_flip=True)\n",
    "\n",
    "validation_datagen = ImageDataGenerator(rescale=1./255.) # Your Code Here\n",
    "    \n",
    "# Keep These\n",
    "print(training_images.shape)\n",
    "print(testing_images.shape)\n",
    "    \n",
    "# Their output should be:\n",
    "# (27455, 28, 28, 1)\n",
    "# (7172, 28, 28, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "Rmb7S32cgRqS"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 1.4590 - acc: 0.5233\n",
      "858/858 [==============================] - 7s 9ms/step - loss: 2.6148 - acc: 0.2047 - val_loss: 1.4590 - val_acc: 0.5233\n",
      "Epoch 2/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.9617 - acc: 0.6606\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 1.7640 - acc: 0.4392 - val_loss: 0.9617 - val_acc: 0.6606\n",
      "Epoch 3/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.6663 - acc: 0.7574\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 1.3014 - acc: 0.5763 - val_loss: 0.6663 - val_acc: 0.7574\n",
      "Epoch 4/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.5686 - acc: 0.7690\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 1.0192 - acc: 0.6651 - val_loss: 0.5686 - val_acc: 0.7690\n",
      "Epoch 5/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.5687 - acc: 0.7939\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.8435 - acc: 0.7222 - val_loss: 0.5687 - val_acc: 0.7939\n",
      "Epoch 6/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.3641 - acc: 0.8582\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.6968 - acc: 0.7685 - val_loss: 0.3641 - val_acc: 0.8582\n",
      "Epoch 7/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.2870 - acc: 0.8975\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.6243 - acc: 0.7926 - val_loss: 0.2870 - val_acc: 0.8975\n",
      "Epoch 8/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.1768 - acc: 0.9375\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.5593 - acc: 0.8176 - val_loss: 0.1768 - val_acc: 0.9375\n",
      "Epoch 9/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.2124 - acc: 0.9197\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.5021 - acc: 0.8345 - val_loss: 0.2124 - val_acc: 0.9197\n",
      "Epoch 10/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.1455 - acc: 0.9518\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.4675 - acc: 0.8478 - val_loss: 0.1455 - val_acc: 0.9518\n",
      "Epoch 11/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.1528 - acc: 0.9499\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.4299 - acc: 0.8585 - val_loss: 0.1528 - val_acc: 0.9499\n",
      "Epoch 12/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.2243 - acc: 0.9142\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.3999 - acc: 0.8700 - val_loss: 0.2243 - val_acc: 0.9142\n",
      "Epoch 13/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.1238 - acc: 0.9594\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.3817 - acc: 0.8757 - val_loss: 0.1238 - val_acc: 0.9594\n",
      "Epoch 14/15\n",
      "225/225 [==============================] - 0s 2ms/step - loss: 0.1050 - acc: 0.9621\n",
      "858/858 [==============================] - 6s 7ms/step - loss: 0.3651 - acc: 0.8828 - val_loss: 0.1050 - val_acc: 0.9621\n",
      "Epoch 15/15\n",
      "225/225 [==============================] - 1s 3ms/step - loss: 0.1359 - acc: 0.9501\n",
      "858/858 [==============================] - 7s 8ms/step - loss: 0.3492 - acc: 0.8876 - val_loss: 0.1359 - val_acc: 0.9501\n",
      "7172/7172 [==============================] - 2s 333us/sample - loss: 3.9249 - acc: 0.7540s - loss: 3.8525 - \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[6.92426086682151, 0.56609035]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Define the model\n",
    "# Use no more than 2 Conv2D and 2 MaxPooling2D\n",
    "model = tf.keras.models.Sequential([\n",
    "    # Your Code Here\n",
    "    tf.keras.layers.Conv2D(32, (3,3), input_shape=(28, 28, 1), activation='relu'),\n",
    "    tf.keras.layers.MaxPooling2D(2,2),\n",
    "    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),\n",
    "    tf.keras.layers.MaxPooling2D(2,2),\n",
    "    tf.keras.layers.Flatten(),\n",
    "    tf.keras.layers.Dense(512, activation='relu'),\n",
    "    tf.keras.layers.Dense(26, activation='softmax')\n",
    "])\n",
    "\n",
    "# Compile Model. \n",
    "model.compile(loss='sparse_categorical_crossentropy', \n",
    "              optimizer=tf.keras.optimizers.RMSprop(lr=0.001), \n",
    "              metrics=['acc'])\n",
    "\n",
    "# Train the Model\n",
    "history = model.fit_generator(train_datagen.flow(training_images, training_labels, batch_size=32),\n",
    "                              steps_per_epoch=len(training_images) / 32,\n",
    "                              epochs=15,\n",
    "                              validation_data=validation_datagen.flow(testing_images, testing_labels, batch_size=32),\n",
    "                              validation_steps=len(testing_images) / 32)\n",
    "\n",
    "model.evaluate(testing_images, testing_labels)\n",
    "\n",
    "# The output from model.evaluate should be close to:\n",
    "[6.92426086682151, 0.56609035]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "_Q3Zpr46dsij"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the chart for accuracy and loss on both training and validation\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "acc = history.history['acc']\n",
    "val_acc = history.history['val_acc']\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "\n",
    "epochs = range(len(acc))\n",
    "\n",
    "plt.plot(epochs, acc, 'r', label='Training accuracy')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation accuracy')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.legend()\n",
    "plt.figure()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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cm/WDE44wZO7czFm4MCBvPHGG+wMrZy2atUq1q5dS9euXfeOO8/IyKBdu3a89tpr+71+1apVtG3bFrCyu4MHDyY9PZ1BgwaxY8eOvftdeeWVe8sF33HHHYBVcly7di2nnnoqp556KgBpaWls2rQJgLFjx9K2bVvatm27t1zwqlWraN26NX/6059o06YNZ5xxxj7nKUlhx/zll18466yz9pYAfvHFFwEYPXo0xx57LOnp6fvVuI+GxBnBP2AAjBoFK1dCy5ZBR+NcTKrsir+NGjWiU6dOzJgxg379+jF58mQGDRqEiJCamsrUqVOpW7cumzZt4oQTTqBv375Frh06btw4atasyaJFi1i0aNE+JXvvvvtuGjZsyO7du+nRoweLFi3iz3/+M2PHjmX27Nk0brzvyOwFCxbw9NNPM3/+fFSVzp07c8opp9CgQQOWLVvGpEmTePLJJzn//POZMmUKQ4cOLfH3UNQxV65cySGHHMKbb74JWAngLVu2MHXqVL7++mtEJCpdRQUlRssdLLkDvLLfMHznXIDCu2bCu2RUlVtvvZX09HR69uzJmjVrWL9+fZHHmTNnzt4km56eTnp6+t7nXnrpJTIyMujYsSOLFy8usSjYvHnzOO+886hVqxa1a9emf//+zJ07F4AWLVrQoUMHoPiywpEes127drz77rvcfPPNzJ07l3r16lG3bl1SU1O57LLLeOWVV6hZs2ZE5yiNxGm5t2gBHTta10wFfMVxLhEEUfH33HPP3VsdcceOHXtb3BMmTGDjxo0sWLCAlJQU0tLSCi3zG66wVv13333Hgw8+yKeffkqDBg0YPnx4iccpbqR2XrlgsJLBkXbLFHXMo446igULFvDWW29xyy23cMYZZ3D77bfzySefMGvWLCZPnsyjjz7Ke++9F9F5IpU4LXew1vvHH0N2dtCROOdCateuTffu3bnkkkv2uZCak5PDgQceSEpKCrNnz+b7778v9jjhZXe/+uorFoUmLm7bto1atWpRr1491q9fv3cFJIA6derw888/F3qsV199lV9//ZVffvmFqVOn0q1bt3K9z6KOuXbtWmrWrMnQoUMZOXIkn332Gdu3bycnJ4c+ffrw8MMPV8iC3InTcgdbfu+222wRj2uvDToa51zIkCFD6N+//z4jZy688ELOOeccMjMz6dChA8ccc0yxx7jyyiu5+OKL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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, loss, 'r', label='Training Loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation Loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.legend()\n",
    "plt.figure()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "name": "Exercise 8 - Question.ipynb",
   "provenance": [
    {
     "file_id": "1KMi9wAhMhxvuc-bfptkCUlnVRGrh5ySj",
     "timestamp": 1550682934823
    }
   ],
   "version": "0.3.2"
  },
  "kernelspec": {
   "display_name": "Python (Python 3.6)",
   "language": "python",
   "name": "python36"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
